#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using std::cout;
using std::endl;
using std::string;
using std::vector;

struct Less
{
    bool operator()(int a, int b)
    {
        return a < b;
    }
};
struct Greater
{
    bool operator()(int a, int b)
    {
        return a > b;
    }
};
// int main()
// {
//     int array[] = {4, 1, 8, 5, 3, 7, 0, 9, 2, 6};
//     for (auto e : array)
//     {
//         cout << e << " ";
//     }
//     cout << endl;
//     // 默认按照小于比较，排出来结果是升序
//     std::sort(array, array + sizeof(array) / sizeof(array[0]), std::less<int>());
//     for (auto e : array)
//     {
//         cout << e << " ";
//     }
//     cout << endl;
//     // 如果需要降序，需要改变元素的比较规则
//     std::sort(array, array + sizeof(array) / sizeof(array[0]), std::greater<int>());
//     for (auto e : array)
//     {
//         cout << e << " ";
//     }
//     cout << endl;

//     Less l;
//     std::sort(array, array + sizeof(array) / sizeof(array[0]), l);
//     for (auto e : array)
//     {
//         cout << e << " ";
//     }
//     cout << endl;
//     Greater g;
//     std::sort(array, array + sizeof(array) / sizeof(array[0]), g);
//     for (auto e : array)
//     {
//         cout << e << " ";
//     }
//     cout << endl;
//     return 0;
// }

struct Goods
{
    string _name;  // 名字
    double _price; // 价格
    int _evaluate; // 评价
    Goods(const char *str, double price, int evaluate)
        : _name(str), _price(price), _evaluate(evaluate)
    {
    }
};
struct ComparePriceLess
{
    bool operator()(const Goods &gl, const Goods &gr)
    {
        return gl._price < gr._price;
    }
};
struct ComparePriceGreater
{
    bool operator()(const Goods &gl, const Goods &gr)
    {
        return gl._price > gr._price;
    }
};
// int main()
// {
//     vector<Goods> v = {{"苹果", 2.1, 5}, {"香蕉", 3, 4}, {"橙子", 2.2, 3}, {"菠萝", 1.5, 4}};
//     sort(v.begin(), v.end(), ComparePriceLess());
//     sort(v.begin(), v.end(), ComparePriceGreater());
// }

void test1()
{
    int a = 10;
    int b = 20;
    auto add1 = [](int x, int y) mutable -> int
    {
        return x + y;
    };
    cout << add1(a, b) << endl;

    auto add2 = [a](int y) mutable -> int
    {
        return a + y;
    };
    cout << add2(b) << endl;

    auto add3 = [a, b]() mutable -> int
    {
        return a + b;
    };
    cout << add3() << endl;

    // 修改a和b，那么lambda表达式要去掉const属性
    cout << "交换前 ： " << a << " " << b << endl;
    auto add4 = [&a, &b]() mutable -> int
    {
        auto c = a;
        a = b;
        b = c;
    };
    add4();
    cout << "交换后 ： " << a << " " << b << endl;
}
const static int ads = 100;
void test2()
{
    int a = 100;
    int b = 200;
    auto sss = [=]()mutable ->void
    {
        a = 10;
        b = 20;
        // ads++;
        cout << a << b << endl;
    };
    sss();
    cout << a << b << endl;
}

int main()
{
    // test1();
    test2();
    return 0;
}
